type Direction = "left" | "right" | "top" | "bottom"
type cssPadding = `padding-${Direction}`
type cssMargin = `margin-${Direction}`


type EventName<T extends string> = `${T}Change`
type Concat<S1 extends string, S2 extends string> = `${S1}-${S2}`
type ToSting<T extends string | number | boolean | bigint> = `${T}`
type Case<T extends string> = `${Uppercase<T>} ${Lowercase<T>} ${Capitalize<T>} ${Uncapitalize<T>}`
type InferRoot<T> = T extends `${infer R}${Capitalize<Direction>}` ? R : T

type T0 = EventName<"foo">
type T1 = Concat<"ccc", "ddd">
type T2 = ToSting<"w" | 456 | false | -1234n>
type T3 = EventName<"a" | "b" | "c">
type T4 = Concat<"t" | "b", "l" | "r">
type T5 = Case<"bar">
type T6 = InferRoot<"marginRight">

